﻿using System;
using YookingBizWQW.Class.Public;
using YookingFileIO.Class;
using YookingKitBox.Class.Public;
using static System.Net.Mime.MediaTypeNames;

namespace YookingBizWQW.Class.Admin
{
    public class clsDllUpdate
    {
        //注释：王庆文 2020年01月04日==========================================================
        //直接从浏览器端上传二进制文件数据，然后生成或者重写指定名称的二进制文件
        public string UpdateDLLFile(string strB64RequestData)
        {
            string strRtData = "no data"; //DLL文件的更新结果

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strB64Data = "AMW/=SqDEAzKlUBf2C"; //文件Base64数据
            string strFileName = "YookingBizWQW.dll"; //DLL类库文件名称

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 2)
            {
                strB64Data = strArray[0];
                strFileName = strArray[1];
            }

            #endregion

            try
            {
                //将浏览器端传过来的BASE64格式的文件数据，转成二进制数据格式
                byte[] bufferData = Convert.FromBase64String(strB64Data);

                //strFolder=""; 默认将文件保存在当前应用程序所在目录
                clsRWFile myDLL = new clsRWFile(); //重写并覆盖DLL文件
                myDLL.SaveBinaryFile("", strFileName, bufferData); 

                strRtData = "文件【" + strFileName + "】覆盖已完成！";
            }
            catch(Exception ex)
            {
                strRtData = ex.Message.ToString();
            }

            return strRtData; //返回DLL文件更新情况描述
        }

        //注释：王庆文 2020年01月04日=========================================================
        /// <summary>
        /// 在windows、linux、OSX三大平台上执行各自的批处理命令文件。
        /// 在windows平台上执行.bat批处理命令；
        /// 在linux平台上执行.sh批处理命令；
        /// 在苹果OS平台上执行.sh批处理命令；
        /// </summary>
        /// <param name="strFileFullName">批处理文件全路径 + 文件全名</param>
        /// <returns>批处理命令执行结果</returns>
        public string RunPlatformCommand(string strB64RequestData)
        {
            string strRtData = "no data"; //批处理命令执行结果

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            //将要运行的批处理文件的全路径（包含路径 + 文件名）
            string strFileFullName = "/etc/rsyk.sh"; 

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 1)
            {
                strFileFullName = strArray[0];
            }

            #endregion

            strRtData = clsShellKit.RunPlatformCommand(strFileFullName);

            return strRtData; //命令执行结果
        }



    }
}
